##############################################################################
# tmux 速查表 (tmux Cheatsheet)
# 终端复用器 (Terminal Multiplexer)
# https://github.com/funnyzak/cli-cheatsheets
##############################################################################

# 图例 (Legend):
#   - PREFIX    : 默认前缀键 `Ctrl+b` (Default prefix key, configurable)
#   - SESSION   : 会话名称 (Session name, e.g., my_dev_session)
#   - WINDOW_NUM: 窗口编号 (Window number, e.g., 0, 1, 2)
#   - PANE_NUM  : 窗格编号 (Pane number, e.g., 0, 1)
#   - TEXT      : 文本内容 (Text content to send)

##############################################################################
# 基本概念 (Basic Concepts)
##############################################################################

# tmux 基本工作流程 (tmux workflow):
# 1. 创建会话 (Create a session)
# 2. 在会话中创建多个窗口 (Create multiple windows within the session)
# 3. 在每个窗口中创建多个窗格 (Create multiple panes within each window)
# 4. 可以随时分离会话，稍后重新连接 (Detach from session anytime, reattach later)

##############################################################################
# 会话管理 (Session Management)
##############################################################################

tmux                                          # 启动新会话 (Start new session)
tmux new -s SESSION                           # 启动命名会话 (Start named session)
tmux ls                                       # 列出所有会话 (List all sessions)
tmux attach                                   # 连接到最近的会话 (Attach to recent session)
tmux attach -t SESSION                        # 连接到指定会话 (Attach to specific session)
tmux attach -t :WINDOW_NUM                    # 连接到指定会话的指定窗口 (Attach to specific window in session)
tmux detach                                   # 从当前会话分离 (Detach from current session, inside tmux)
PREFIX d                                      # 从当前会话分离 (Detach from current session, shortcut)
PREFIX s                                      # 列出并选择会话 (List and select sessions, shortcut)
tmux switch -t SESSION                        # 切换到指定会话 (Switch to specific session)
tmux kill-session -t SESSION                  # 杀死指定会话 (Kill specific session)
tmux kill-server                              # 杀死所有会话和 tmux 服务器 (Kill all sessions and tmux server)

##############################################################################
# 窗口管理 (Window Management)
##############################################################################

PREFIX c                                      # 创建新窗口 (Create new window)
PREFIX &                                      # 关闭当前窗口 (Close current window, confirm)
PREFIX p                                      # 切换到上一个窗口 (Switch to previous window)
PREFIX n                                      # 切换到下一个窗口 (Switch to next window)
PREFIX l                                      # 切换到上次选择的窗口 (Switch to last selected window)
PREFIX <NUM>                                  # 切换到指定编号窗口 (Switch to numbered window, e.g., PREFIX 0, PREFIX 1)
PREFIX w                                      # 列出所有窗口并选择 (List all windows and select)
PREFIX ,                                      # 重命名当前窗口 (Rename current window)
PREFIX .                                      # 更改当前窗口编号 (Change current window number, use carefully)
PREFIX f                                      # 查找窗口 (Find window, search by name)
PREFIX !                                      # 将当前窗格移到新窗口 (Move current pane to new window)

##############################################################################
# 窗格管理 (Pane Management)
##############################################################################

PREFIX %                                      # 垂直分割窗格 (Split pane vertically, left/right)
PREFIX "                                      # 水平分割窗格 (Split pane horizontally, top/bottom)
PREFIX x                                      # 关闭当前窗格 (Close current pane, confirm)
PREFIX o                                      # 切换到下一个窗格 (Switch to next pane)
PREFIX ;                                      # 切换到上一个窗格 (Switch to previous pane)
PREFIX <Arrow Keys>                           # 切换到指定方向窗格 (Switch to pane in direction, e.g., PREFIX Up, PREFIX Down)
PREFIX z                                      # 切换当前窗格全屏 (Toggle current pane fullscreen)
PREFIX {                                      # 将当前窗格与上一个窗格互换 (Swap current pane with previous)
PREFIX }                                      # 将当前窗格与下一个窗格互换 (Swap current pane with next)
PREFIX M-Up/Down/Left/Right                   # 调整当前窗格大小 (Resize current pane, Alt + arrow keys)
PREFIX q                                      # 显示窗格编号 (Show pane numbers, press number to switch)
PREFIX !                                      # 将当前窗格分离为新窗口 (Break current pane into new window)
PREFIX C-o                                    # 旋转当前窗口的所有窗格 (Rotate all panes in current window)

# 同步输入 (Synchronize Panes):
PREFIX M-s                                    # 开启/关闭所有窗格同步输入 (Toggle input synchronization across all panes)

##############################################################################
# 复制模式 (Copy Mode)
##############################################################################

PREFIX [                                      # 进入复制模式 (Enter copy mode)
# 在复制模式下 (In copy mode):
#   - 光标移动 (Cursor movement):
#       hjkl (Vim 风格) 或 方向键 (hjkl Vim style or arrow keys)
#       C-u / C-d                             # 半页上/下滚动 (Half page up/down)
#       g / G                                 # 滚动到顶部/底部 (Go to top/bottom)
#       b / w                                 # 按单词移动 (Move by word)
#       ^ / $                                 # 移动到行首/行尾 (Go to line start/end)
#   - 文本选择 (Text selection):
#       Space                                 # 开始选择 (Start selection)
#       移动光标                               # 扩大选择范围 (Move cursor to expand selection)
#       Enter                                 # 复制到 tmux 缓冲区 (Copy to tmux buffer)
#   - 粘贴文本 (Paste text):
#       PREFIX ]                              # 粘贴 tmux 缓冲区内容 (Paste tmux buffer content)
#   - 退出复制模式 (Exit copy mode):
#       q / Esc                               # 退出复制模式 (Exit copy mode)

# 注意 (Note): 复制模式行为可能因 tmux 版本或配置而异 (Copy mode behavior may vary by tmux version or configuration).
#       Newer versions may support mouse selection by default.

##############################################################################
# 配置与重载 (Configuration & Reload)
##############################################################################

# 配置文件通常在 ~/.tmux.conf (Configuration file: ~/.tmux.conf)

PREFIX :                                      # 进入 tmux 命令模式 (Enter tmux command mode)
  source-file ~/.tmux.conf                    # 重载配置文件 (Reload configuration file)
  display-message "tmux.conf reloaded"        # 显示重载确认消息 (Show reload confirmation)

# 常用配置示例 (添加到 ~/.tmux.conf) (Common configuration examples):
#   set -g prefix C-a                         # 将前缀键从 C-b 改为 C-a (Change prefix from C-b to C-a)
#   unbind C-b                                # 解绑旧的前缀键 (Unbind old prefix)
#   bind C-a send-prefix                      # 绑定 C-a 为前缀键 (Bind C-a as prefix)
#   bind r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded!" # 快速重载配置 (Quick reload)
#   set -g mouse on                           # 启用鼠标支持 (Enable mouse support)
#   set -g status-position top                # 将状态栏放到顶部 (Move status bar to top)
#   set -g history-limit 10000                # 增加历史记录行数 (Increase history limit)
#   set -g default-terminal "screen-256color" # 确保 256 色支持 (Ensure 256-color support)
#   set -g allow-rename off                   # 禁用窗口自动重命名 (Disable automatic window renaming)
#   set -g base-index 1                       # 窗口编号从 1 开始 (Start window numbering at 1)
#   set -g pane-base-index 1                  # 窗格编号从 1 开始 (Start pane numbering at 1)

##############################################################################
# 实用技巧 (Tips & Tricks)
##############################################################################

# 快速导航到特定窗格 (结合 PREFIX q) (Quick pane navigation with PREFIX q):
#   1. 按 PREFIX q (Press PREFIX q)
#   2. 按对应数字键切换窗格 (Press corresponding number to switch)

# 将 shell 命令输出重定向到文件 (Redirect shell output to file):
#   PREFIX : pipe-pane -o 'cat > ~/tmux-pane-output.txt'
#   (Ctrl+d 或 exit 退出 shell 后写入文件) (File writes after Ctrl+d or exit)

# 搜索历史记录 (在复制模式下) (Search history in copy mode):
#   PREFIX [                                  # 进入复制模式 (Enter copy mode)
#   Ctrl+s                                    # 向前搜索 (Search forward)
#   Ctrl+r                                    # 向后搜索 (Search backward)

# 运行命令但保持会话分离 (后台任务) (Run command detached for background tasks):
#   tmux new -s my_task -d 'long_running_command; tmux kill-session'
#   创建会话运行命令，完成后自动杀死会话 (Creates session, runs command, kills when complete)

# 更改前缀键 (Change prefix key):
#   在 ~/.tmux.conf 中添加配置 (Add to ~/.tmux.conf):
#   `set -g prefix C-a` 和 `unbind C-b; bind C-a send-prefix`
#   重载配置 `PREFIX : source-file ~/.tmux.conf` (Reload config)

##############################################################################
# 示例 (Examples)
##############################################################################

# 1. 设置开发会话 (Setup development session):
#    tmux new -s dev
#    PREFIX %                                # 垂直分割 (Vertical split)
#    PREFIX "                                # 水平分割 (Horizontal split)
#    PREFIX <Up>                             # 切换到顶部窗格 (Switch to top pane)
#    PREFIX ,                                # 重命名窗口 "Main" (Rename window "Main")
#    PREFIX c                                # 创建新窗口 (Create new window)
#    PREFIX ,                                # 重命名窗口 "Logs" (Rename window "Logs")
#    PREFIX 0                                # 切换回第一个窗口 (Switch back to first window)
#    PREFIX w                                # 查看所有窗口和会话 (View all windows and sessions)
#    PREFIX d                                # 分离会话 (Detach session)

# 2. 重新连接并工作 (Reattach and work):
#    tmux attach -t dev
#    # 在一个窗格中输入 (In one pane): git status
#    # 切换窗格 (Switch panes): PREFIX o
#    # 在另一个窗格中输入 (In other pane): tail -f /var/log/syslog
#    PREFIX z                                # 全屏显示日志窗格 (Fullscreen log pane)
#    PREFIX z                                # 恢复日志窗格 (Restore log pane)

##############################################################################
# 更多资源 (Resources)
##############################################################################

# 官方文档 (Official docs): https://man.openbsd.org/cgi-bin/man.cgi?query=tmux
# GitHub 项目 (GitHub): https://github.com/tmux/tmux
# 社区指南 (Community guide): https://www.hamvocke.com/blog/a-guide-to-tmux/

# vim: set ts=4 sw=4 tw=0 et ft=bash :
